package com.hibase.upms.service.menu;

import cn.hutool.core.lang.tree.Tree;
import com.github.pagehelper.PageInfo;
import com.hibase.core.mybatis.service.BaseService;
import com.hibase.upms.entity.menu.MdsMenu;
import com.hibase.upms.entity.menu.dv.MdsDataPermDV;
import com.hibase.upms.entity.menu.dv.MdsMenuRoleDV;
import com.hibase.upms.entity.menu.vo.MdsMenuIndexVO;
import com.hibase.upms.entity.menu.vo.MdsMenuSearchVO;
import com.hibase.upms.entity.menu.vo.MdsMenuTreeVO;
import com.hibase.upms.entity.menu.vo.MdsMenuUpdateVO;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author hufeng
 * @since 2019-04-03
 */
public interface MdsMenuService extends BaseService<MdsMenu> {

    /**
     * 加载首页模块菜单列表
     */
    List<MdsMenu> selectList();

    /**
     * 加载PDA模块菜单
     * @return
     */
    List<MdsMenu> selectPDAList();

    /**
     * 查询角色-菜单关系
     * @return
     */
    List<MdsMenuRoleDV> selectRoleAndPathInfos();

    /**
     * 添加菜单
     */
    @Deprecated
    void changeMenu(MdsMenu mdsMenu);

    /**
     * 添加菜单
     */
    void changeMenu(MdsMenuUpdateVO updateVO);

    /**
     * 菜单状态更新（启用停用）
     * @param ids
     * @param recordStatus
     */
    void changeMenuStatus(List<String> ids, boolean recordStatus);

    /**
     * 查询列表
     *
     * @param searchVO
     * @return
     */
    PageInfo<MdsMenu> selectMenuList(MdsMenuSearchVO searchVO);

    /**
     * 查询所有菜单列表
     */
    List<MdsMenu> selectAllMenuList();

    /**
     * 分组查询所有菜单
     * @return
     */
    List<MdsMenuIndexVO> selectAllMenuGroupList();

    /**
     * 查询角色菜单列表
     */
    List<MdsMenu> selectRoleMenuList(Map map);

    /**
     * 查询用户数据权限
     *
     * @return
     */
    List<MdsDataPermDV> selectDataPerm(Map<String, Object> map);

    void importMenu(MultipartFile multipartFile) throws IOException;

    /**
     * 构建树
     * @param treeVO
     * @return
     */
    List<Tree<String>> treeMenu(MdsMenuTreeVO treeVO);

    void addAll(String id);
}